#ifndef MUSIC_H
#define MUSIC_H

#include <QWidget>
#include <QMouseEvent>
#include <QDebug>
#include <QGraphicsDropShadowEffect>
#include <QJsonArray>
#include <QJsonObject>
#include <QDir>
#include <QFileDialog>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QPropertyAnimation>
#include <QMessageBox>
#include "musiclist.h"
#include "volumetool.h"
#include "commonpage.h"
#include "lrcpage.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Music; }
QT_END_NAMESPACE

class Music : public QWidget
{
    Q_OBJECT

public:
    Music(QWidget *parent = nullptr);
    ~Music();
    void initUI();      //初始化UI
    //重写鼠标的点击以及移动的函数来实现拖拽的功能
    void mousePressEvent(QMouseEvent* event)override;
    void mouseMoveEvent(QMouseEvent* event)override;
    //用来绑定信号槽机制
    void onBtFormClick(int id);
    void connectSignalAndSlot();
    //获取随机的推荐的图片以及文本的数组
    QJsonArray randomPicture();
    //响应commonpage发送的updatelikeMusic信号
    void onUpdateLikeMusic(bool isLike,const QString& musicId);
    void initPlayer();      //初始化播放
    void onPlayClicked();   //处理播放按钮
    void onPlayStateChanged();   //处理播放按钮的图片切换
    void onPlayUpCliked();      //上一曲
    void onPlayDownCliked();    //下一曲
    void onPlayBackModeCliked();    //切换播放模式
    void onPlayBackModeChanged(QMediaPlaylist::PlaybackMode curMode);   //信号产生时，处理图片更换
    void onPlayAll(PageType pageType);           //用来处理点击全部的
    void playAllOfCommonPage(CommonPage* page,int index);
    void playMusicByIndex(CommonPage* page,int index);
    void onCurrentIndexChanged(int index);
    void setMusicSlience(bool isMuted);
    void setPlayerVolumn(int volume);
    void onDurationChanged(qint64 duration);
    void onPostionChanged(qint64 duration);
    void onMusicSliderChanged(float value);         //处理移动进度条之后的操作
    void onMetaDataAvailableChanged(bool available);        //填写音乐作者等的设置
    void onLrcWordClicked();                        //处理lcr词界面显示
private slots:
    void on_volume_clicked();

    void on_addLocal_clicked();

    void on_quit_clicked();

    void on_min_clicked();

    void on_max_clicked();

private:
    Ui::Music *ui;
    QPoint dragPosition;    //用来标记上一次点击的位置和左上角的差距
    VolumeTool* volumeTool; //用来使用音量的调整
    MusicList musicList;    //用来保存音乐的基本信息
    QMediaPlayer* player;   //用来播放音乐
    QMediaPlaylist* playList;   //用来缓存播放列表
    CommonPage* curPage;    //用来记录当前播放的音乐的页面
    int curIndex;           //用来记录当前页面的当前歌曲下标
    qint64 totalTime;       //记录音乐的总时间;
    LrcPage* lrcPage;       //用来显示歌词
    QPropertyAnimation* lrcAnimation;       //用来处理lrc词的动画显示处理
};
#endif // MUSIC_H
